实现随机数组方法总结

您所在的位置:网站首页 js 生成随机数组 实现随机数组方法总结

实现随机数组方法总结

2023-06-20 21:47| 来源: 网络整理| 查看: 265

前言

翻阅了一些资料,思考许久后,给大家整理出几种可以实现随机数组的方法。一起来看看都有哪些吧~

一、方案一 1. 实现思路

使用Array的sort方法和Math的random方法

数组sort方法可以传入一个用来指定按某种顺序进行排列的函数,如果省略,元素按照转换为的字符串的各个字符的Unicode位点进行排序。

如果参数小于0 就交换位置 ,如果参数大于0就不交换位置 。接下来用刚才的较大数字跟下一个进行比较。

使用Math提供的random方法,这个方法默认生成0~1之间的随机小数。我们在其基础上-0.5,传入数组的sort方法中,可以来帮助我们进行随机排序。

2. 代码演示

代码如下(示例):

let arr = [1, 2, 3, 4, 5, 6, 7, 8, 9] arr.sort(function(){ return Math.random() - 0.5 }) 复制代码

或者使用ES6箭头函数改写

let arr = [1, 2, 3, 4, 5, 6, 7, 8, 9] arr.sort(() => Math.random() - 0.5) 复制代码 3. 缺点

使用这个方法貌似实现了我们想要随机数组的需求,随后我看了这位JackieDYH大佬分析后, 觉得这样实现随机数组的确有一些不随机,感兴趣的小伙伴儿可以看一下原文。

二、方案二 1. Fisher-Yates shuffle(洗牌算法)

lodash中提供了shuffle方法,基于洗牌算法来实现的,可以快速实现随机数组。

lodash官网:lodash lodash官方文档:shuffle方法

这里就不给大家演示了,可以点击链接去看看如何使用。

2. es6实现

代码如下(示例):

function shuffle(arr) { let i = arr.length while (i) { let j = Math.floor(Math.random() * i--) ;[arr[j], arr[i]] = [arr[i], arr[j]] } return arr } 复制代码 3. es5实现 function randSort1(arr) { for (var i = 0, len = arr.length; i < len; i++) { var rand = parseInt(Math.random() * len) var temp = arr[rand] arr[rand] = arr[i] arr[i] = temp } return arr } 复制代码 三、方案三 1. 实现思路

每生成一个随机数,就作为下标从原数组中取一个元素放入新数组中,同时将原数组中的值删除掉。

2. 代码演示 let arr = [1, 2, 3, 4, 5, 6, 7, 8, 9] function randomArr(arr) { let newArr = [] // 判断原数组长度是否大于0 while (arr.length > 0) { let random = Math.floor(Math.random() * arr.length) // 向新数组中添加 newArr.push(arr[random]) // 将原数组中的删除 arr.splice(random, 1) } return newArr } console.log(randomArr(arr)) 复制代码 3. 缺点

会影响到原数组

总结

个人觉得使用方案二很适合,有什么问题,欢迎评论区留言一起讨论~



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3